package com.android.test

/**
 * 1. Kotlin 中的 val 和 var 有什么区别？
 * val：用于声明只读变量（read-only），相当于 Java 中的 final 变量。一旦初始化就不能被重新赋值。
 *
 * var：用于声明可变变量（mutable），其值可以改变。
 *
 * 关键点：val 引用本身不可变，但其指向的对象内容可能是可变的（例如，一个 val 的 List 不能重新赋值，但可以用 add 方法添加元素）。
 *
 *  2. Kotlin 如何处理空安全（Null Safety）？
 * Kotlin 通过类型系统在编译期消除 NullPointerException (NPE) 的风险。
 *
 * 可空类型：在类型后加 ?，如 String?。表示这个变量可以持有 null。
 *
 * 非空类型：如 String。编译器保证不会为 null。
 *
 * 安全调用操作符（?.）：如果对象不为空，则调用其方法或属性；否则返回 null。val length = user?.name?.length
 *
 * Elvis 操作符（?:）：如果左侧表达式为 null，则返回右侧的值。val length = user?.name?.length ?: 0
 *
 * 非空断言操作符（!!）：将任何值转换为非空类型，如果为 null 则抛出 NPE。应谨慎使用。
 *
 * 安全转换（as?）：尝试转换，如果失败则返回 null 而不是抛出 ClassCastException。
 *
 * 3. 什么是数据类（Data Class）？用 data 关键字标记一个类会自动生成哪些函数？
 * 数据类主要用于持有数据。编译器会自动为其生成：
 *
 * equals() / hashCode()
 *
 * toString() (格式为 User(name=John, age=42))
 *
 * componentN() 函数（用于解构声明）
 *
 * copy() 函数（非常实用，用于复制一个对象并修改其部分属性）
 *
 * 限制：主构造函数需要有至少一个参数，且所有参数必须标记为 val 或 var。
 *
 * 4. 简述 Kotlin 中 == 和 === 的区别。
 * ==：结构相等（Structural equality）。它调用的是 equals() 方法来判断两个对象的内容是否相等。对于基本类型，它检查值是否相等。
 *
 * ===：引用相等（Referential equality）。它判断两个引用是否指向同一个对象实例。相当于 Java 中的 ==。
 *
 * 5. 什么是字符串模板？如何使用？
 * 字符串模板允许在字符串字面值中嵌入变量或表达式。
 *
 * 使用 $ 符号嵌入一个简单的变量名："Hello, $name"
 *
 * 使用 ${} 包裹一个表达式："1 + 2 = ${1 + 2}" 或 "${user.name}'s age is ${user.age}"
 *
 *
 *  Created by zxn on 2025/9/4.
 **/
class KotlinCode {

    /**
     * 6. 什么是扩展函数（Extension Function）？它的原理是什么？
     * 扩展函数允许在不修改原有类的情况下，为类添加新的函数。
     */
//    fun String.addExclamation(): String = this + "!"
//// 使用
//    "Hello".addExclamation() // 输出 "Hello!"

}